//这个函数总是返回一个 promise。其他值将自动被包装在一个 resolved 的 promise 中
// async function f1() {
//   return 1;
// }
// f1().then(console.info); // 1

//显式地返回一个 promise
// async function f2() {
//   return Promise.resolve(1);
// }
// f2().then(console.info); // 1

//关键字 await 让 JavaScript 引擎等待直到 promise 完成（settle）并返回结果。
// async function f() {
//   let promise = new Promise((resolve, reject) => {
//     console.info("prepare"); //
//     setTimeout(() => resolve("done!"), 1000);
//   });

//   let result = await promise; // 等待，直到 promise resolve (*)

//   console.info(result); // "done!"

// }
// f();

//不能在普通函数中使用 await
// function f() {
//     let promise = Promise.resolve(1);
//     let result = await promise; // Syntax error： await is only valid in async functions and the top level bodies of modules
// }

//Class 中的 async 方法
class Waiter {
  async wait() {
    return await Promise.resolve(1);
  }
}

new Waiter().wait().then(console.info); // 1（alert 等同于 result => alert(result)）

//重写下面这个来自 Promise 链 一章的示例代码，使用 async/await 而不是 .then/catch：
// function loadJson(url) {
//   return fetch(url).then((response) => {
//     if (response.status == 200) {
//       return response.json();
//     } else {
//       throw new Error(response.status);
//     }
//   });
// }

// loadJson("https://javascript.info/no-such-user.json").catch(alert); // Error: 404


// async function loadJson(url) { // (1)
//     let response = await fetch(url); // (2)
  
//     if (response.status == 200) {
//       let json = await response.json(); // (3)
//       return json;
//     }
  
//     throw new Error(response.status);
//   }
  
//   loadJson('https://javascript.info/no-such-user.json')
//     .catch(alert); // Error: 404 (4)